Fix io_apic -> i8259 irq handling transition.
Signed-off-by: Keir Fraser <keir@xensource.com>
return ret;
}
-void make_8259A_irq(unsigned int irq)
-{
- disable_irq_nosync(irq);
- io_apic_irqs &= ~(1<<irq);
- enable_irq(irq);
-}
-
/*
* This function assumes to be called rarely. Switching between
* 8259A registers is slow.
#include <mach_apic.h>
#include <io_ports.h>
+#define make_8259A_irq(irq) (io_apic_irqs &= ~(1<<(irq)))
+
int (*ioapic_renumber_irq)(int ioapic, int irq);
atomic_t irq_mis_count;
static inline void init_IO_APIC_traps(void)
{
int irq;
- for (irq = 0; irq < NR_IRQS ; irq++)
- if (IO_APIC_IRQ(irq) && !IO_APIC_VECTOR(irq) && (irq < 16))
+ for (irq = 0; irq < 16 ; irq++)
+ if (IO_APIC_IRQ(irq) && !IO_APIC_VECTOR(irq))
make_8259A_irq(irq);
}
atomic_t irq_err_count;
-inline void disable_irq_nosync(unsigned int irq)
-{
- unsigned int vector = irq_to_vector(irq);
- irq_desc_t *desc = &irq_desc[vector];
- unsigned long flags;
-
- spin_lock_irqsave(&desc->lock, flags);
-
- if ( desc->depth++ == 0 )
- {
- desc->status |= IRQ_DISABLED;
- desc->handler->disable(vector);
- }
-
- spin_unlock_irqrestore(&desc->lock, flags);
-}
-
-void enable_irq(unsigned int irq)
-{
- unsigned int vector = irq_to_vector(irq);
- irq_desc_t *desc = &irq_desc[vector];
- unsigned long flags;
-
- spin_lock_irqsave(&desc->lock, flags);
-
- if ( --desc->depth == 0 )
- {
- desc->status &= ~IRQ_DISABLED;
- if ( (desc->status & (IRQ_PENDING | IRQ_REPLAY)) == IRQ_PENDING )
- desc->status |= IRQ_REPLAY;
- desc->handler->enable(vector);
- }
-
- spin_unlock_irqrestore(&desc->lock, flags);
-}
-
asmlinkage void do_IRQ(struct cpu_user_regs *regs)
{
unsigned int vector = regs->entry_vector;
(IO_APIC_IRQ(irq) ? IO_APIC_VECTOR(irq) : LEGACY_VECTOR(irq))
#define vector_to_irq(vec) (vector_irq[vec])
-extern void disable_irq_nosync(unsigned int);
-extern void enable_irq(unsigned int);
-
extern int vector_irq[NR_VECTORS];
extern u8 irq_vector[NR_IRQ_VECTORS];
#define AUTO_ASSIGN -1
void disable_8259A_irq(unsigned int irq);
void enable_8259A_irq(unsigned int irq);
int i8259A_irq_pending(unsigned int irq);
-void make_8259A_irq(unsigned int irq);
void init_8259A(int aeoi);
void setup_IO_APIC(void);